﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Etna.Exportaciones.En;
using Etna.Exportaciones.Rn;

namespace WebExportaciones
{
    public partial class frmMant_Requerimiento : System.Web.UI.Page
    {
        private EnCliente loEnCliente;
        private string sModoMantenimiento;
        private string sParametroID = "0";
        private string sNuevo="-1"; 
        
        protected List<EnRequerimientoDetalle> loEnRequerimientoDetalle;
        protected List<EnEstadoRequerimiento> loEnEstadoRequerimiento;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            if (Request.QueryString["modo"] != null)
            {
                sModoMantenimiento = Request.QueryString["modo"];
                hfdModoOperacion.Value = sModoMantenimiento;
                if (sModoMantenimiento == "Mod")
                {
                    sParametroID = Request.QueryString["Id"];
                    txtidRequerimiento.Text = sParametroID;                    

                }
                if (sModoMantenimiento == "Ins")
                {
                    txtidRequerimiento.Text = Request.QueryString["sNuevo"];
                    txtFechaRequerimiento.Text = DateTime.Now.ToShortDateString();
                    txtFechaEntrega.Text = String.Format("{0:dd/MM/yyyy}", DateTime.Now.AddDays(20));                                                
                }

               loEnCliente = (EnCliente) Session["Usuario"];
               if (loEnCliente == null)
               {
                   this.loEnCliente = new RnCliente().Leer(2);
               }
               txtidCliente.Text = loEnCliente.idCliente.ToString();
               txtRazonSocial.Text = loEnCliente.srazonSocial;
               txtRUC.Text = loEnCliente.sruc;
                

               CargarEstadoRequerimiento();
               llenarComboDireccion(loEnCliente.idCliente, "C");
               llenarComboDireccion(loEnCliente.idCliente, "F");
               llenarComboDireccion(loEnCliente.idCliente, "E");

                
                //detalle
                RnRequerimientoDetalle oRnRequerimientoDetalle = new RnRequerimientoDetalle();
                loEnRequerimientoDetalle = oRnRequerimientoDetalle.Listar(int.Parse(sParametroID));
              //  hdfPaginaActual.Value = "0";
                Session["ContenidoGrillaDetalle"] = loEnRequerimientoDetalle;
                EnlazarGridView();                
            }
            ProtegeCampos();
        }
        else
        {
            sModoMantenimiento = hfdModoOperacion.Value;
            loEnRequerimientoDetalle = (List<EnRequerimientoDetalle>)Session["ContenidoGrillaDetalle"];
        }
        txtDesReq.Focus();
    }

    void CargarGrillaDesdeBD()
    {
        RnRequerimiento oRnRequerimiento = new RnRequerimiento();
        if (Request.QueryString["modo"] != null)
        {
            sModoMantenimiento = Request.QueryString["modo"];
            hfdModoOperacion.Value = sModoMantenimiento;
            if (sModoMantenimiento == "Mod")
            {
                
            }
            if (sModoMantenimiento == "Ins")
            {
                if (Session["IdProducto"] == null)
                {
                    int idProducto = (int) Session["IdProducto"];
                    EnProducto oProducto = new RnProducto().Leer(idProducto);
                    EnRequerimientoDetalle oReqDeta = new EnRequerimientoDetalle();
                    oReqDeta.descripcion = oProducto.sDescripcion;
                    oReqDeta.dImpuesto = oProducto.dImpuesto;
                    oReqDeta.dPrecio = oProducto.dPrecio;
                    loEnRequerimientoDetalle.Add(oReqDeta);
                }
            }
        }
        //hdfPaginaActual.Value = "0";
        Session["ContenidoGrillaDetalle"] = loEnRequerimientoDetalle;
        gvRequerimientoDetalle.PageIndex = 0;
        EnlazarGridView();
    }

    void CargarEstadoRequerimiento()
    {
        RnEstadoRequermiento oRnEstadoReq = new RnEstadoRequermiento();
        if (Session["ContenidoEstadoRequerimiento"] == null)
        {
            loEnEstadoRequerimiento = oRnEstadoReq.Listar();
            Session["ContenidoEstadoRequerimiento"] = loEnEstadoRequerimiento;
        }
        else
        {
            loEnEstadoRequerimiento = (List<EnEstadoRequerimiento>)Session["ContenidoEstadoRequerimiento"];
        }
        ListItem oList = new ListItem("--Seleccione--", "0");


        ddlEstadoRequerimiento.DataSource = loEnEstadoRequerimiento;
        ddlEstadoRequerimiento.DataBind();
        ddlEstadoRequerimiento.Items.Insert(0, oList);
    }

    void llenarComboDireccion(int idCliente, string tipoDireccion)
    {
        ListItem oList = new ListItem("--Seleccione--", "0");
        if (tipoDireccion.Equals("C")){
            ddlDireccionCobranza.DataSource = new RnDireccion().Listar(idCliente, tipoDireccion);
            ddlDireccionCobranza.DataBind();
            ddlDireccionCobranza.Items.Insert(0, oList);
        }else if (tipoDireccion.Equals("E")){
            ddlDireccionEntrega.DataSource = new RnDireccion().Listar(idCliente, tipoDireccion);
            ddlDireccionEntrega.DataBind();
            ddlDireccionEntrega.Items.Insert(0, oList);
        }else if (tipoDireccion.Equals("F")){
            ddlDireccionFactura.DataSource = new RnDireccion().Listar(idCliente, tipoDireccion);
            ddlDireccionFactura.DataBind();
            ddlDireccionFactura.Items.Insert(0, oList);
        }        
    }
        //detalle inicio
  

        private void EnlazarGridView()
   {
      int iPosicion;

      if (loEnRequerimientoDetalle != null)
      {
      gvRequerimientoDetalle.DataSource = loEnRequerimientoDetalle;
      gvRequerimientoDetalle.DataBind();


         lblTotalRegistros.Text = loEnRequerimientoDetalle.Count.ToString();
      }


 
 


   }



               protected void gvRequerimientoDetalle_RowCommand(object sender, GridViewCommandEventArgs e)
   {
      if (e.CommandName == "Select")
      {
         int indice = int.Parse(e.CommandArgument.ToString());
         string Comando;
         EnlazarGridView();
         Comando = string.Format("VerMantenimiento('Mod','{0}');", ((GridView)sender).Rows[indice].Cells[1].Text);
         ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Modificar", Comando, true);
      }
   }
               protected void AccionEliminar(object sender, EventArgs e)
               {

               }
               protected void AccionNuevo(object sender, EventArgs e)
               {
                   InsertarDatosDetalle();
               }
   private void InsertarDatosDetalle()
   {
      string Comando;
      EnlazarGridView();
      Comando = "VerMantenimiento('Ins','0');";
      ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Insertar", Comando, true);
   }

        //detalle fin
    protected void AccionLeer(object sender, EventArgs e)
    {
        CargarDatos();
    }

    protected void AccionActualizar(object sender, EventArgs e)
    {
        
    }

    protected void AccionModificar(object sender, EventArgs e)
    {
        ModificarDatos();
    }

    protected void AccionInsertar(object sender, EventArgs e)
    {
        InsertarDatos();
    }

    protected void AccionCancelar(object sender, EventArgs e)
    {
        CancelarRegistro();
    }

    protected void AccionGrabar(object sender, EventArgs e)
    {
        MensajeConfirmacion();
    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        MensajeCancelar();
    }

    protected void ConfirmarCancelar(object sender, EventArgs e)
    {
        CierraVentana("0");
    }

    protected void NoCancelar(object sender, EventArgs e)
    {
        Continuar();
    }

    protected void ConfirmarGrabar(object sender, EventArgs e)
    {
        GrabarDatos();
    }

    protected void NoGrabar(object sender, EventArgs e)
    {
        Continuar();
    }

    protected void btnOk_Click(object sender, EventArgs e)
    {
        CierraVentana("1");
    }

    void CancelarRegistro()
    {
        divPopup.Visible = true;
        divPopup.Style.Add("position", "absolute");
        EstadoControles(false);
        divPopupCancelar.Visible = true;
    }

    void MuestraMensaje(string psMensaje)
    {
        divPopup.Visible = true;
        divPopup.Style.Add("position", "absolute");
        divPopupMensaje.Style.Add("top", "200px");
        EstadoControles(false);
        divPopupMensaje.Visible = true;
        lblPopupMensaje.Text = psMensaje;
    }

    void MensajeConfirmacion()
    {
        divPopup.Visible = true;
        divPopup.Style.Add("position", "absolute");
        EstadoControles(false);
        divPopupConfirmar.Visible = true;
    }

    void MensajeCancelar()
    {
        divPopup.Visible = true;
        divPopup.Style.Add("position", "absolute");
        EstadoControles(false);
        divPopupCancelar.Visible = true;
    }

    void GrabarDatos()
    {
        bool bResultado = false;
        string sMensaje = "";
        divPopupConfirmar.Visible = false;

        switch (sModoMantenimiento)
        {
            case "Ins":
                bResultado = InsertarDatos();
                sMensaje = "Registro realizado con &eacute;xito.";
                break;
            case "Mod":
                bResultado = ModificarDatos();
                sMensaje = "Registro actualizado con &eacute;xito.";
                break;
        }

        if (bResultado == true)
        {
            MuestraMensaje(sMensaje);
        }
    }
    void CargarDatos()
    {
        if (txtidRequerimiento.Text.Trim().Length > 0)
        {
            int idRequerimiento;

            if (!int.TryParse(txtidRequerimiento.Text.Trim(), out idRequerimiento))
            {
                return;
            }
            RnRequerimiento loRnRequerimiento = new RnRequerimiento();
            EnRequerimiento oEnRequerimiento = loRnRequerimiento.Leer(idRequerimiento);

            txtidRequerimiento.Text = oEnRequerimiento.idRequerimiento.ToString();
            txtDesReq.Text = oEnRequerimiento.sDescripcion.ToString();
            ddlEstadoRequerimiento.Text = oEnRequerimiento.sestadoRequerimiento.ToString();
            txtFechaRequerimiento.Text = String.Format("{0:dd/MM/yyyy}", oEnRequerimiento.dfechaRequerimiento);
            txtidCliente.Text = oEnRequerimiento.sCodigoCliente.ToString();
            txtRUC.Text = oEnRequerimiento.sRuc.ToString();
            txtRazonSocial.Text = oEnRequerimiento.sRazonSocial.ToString();

                                    
            ddlDireccionEntrega.DataValueField = oEnRequerimiento.idDireccionEntrega.ToString();
            ddlDireccionCobranza.DataValueField = oEnRequerimiento.idDireccionCobranza.ToString();
            ddlDireccionFactura.Text = oEnRequerimiento.idDireccionFactura.ToString();


            txtFechaEntrega.Text = oEnRequerimiento.dfechaEntrega == null ? "" : String.Format("{0:dd/MM/yyyy}", oEnRequerimiento.dfechaEntrega); ;
                       
        }
    }
    bool InsertarDatos()
    {
        bool bResultado;
        RnRequerimiento oRnRequerimiento = new RnRequerimiento();
        EnRequerimiento oEnRequerimiento = new EnRequerimiento();
        int iTempint;

        if (int.TryParse(txtidCliente.Text, out iTempint))
        {
            oEnRequerimiento.idCliente = iTempint;
        }

        if (int.TryParse(ddlDireccionEntrega.DataValueField, out iTempint))
        {
            oEnRequerimiento.idDireccionEntrega = iTempint;
        }

        if (int.TryParse(ddlDireccionCobranza.DataValueField, out iTempint))
        {
            oEnRequerimiento.idDireccionCobranza = iTempint;
        }

        if (int.TryParse(ddlDireccionFactura.DataValueField, out iTempint))
        {
            oEnRequerimiento.idDireccionFactura = iTempint;
        }
         
        oEnRequerimiento.dfechaEntrega = DateTime.Parse( txtFechaEntrega.Text );
        oEnRequerimiento.sestadoRequerimiento = ddlEstadoRequerimiento.Text;

        bResultado = oRnRequerimiento.Insertar(oEnRequerimiento);

        return bResultado;
    }
    bool ModificarDatos()
    {
        bool bResultado;
        RnRequerimiento oRnRequerimiento = new RnRequerimiento();
        EnRequerimiento oEnRequerimiento = new EnRequerimiento();
        int iTempint;

        if (int.TryParse(txtidRequerimiento.Text, out iTempint))
        {
            oEnRequerimiento.idRequerimiento = iTempint;
        }

        if (int.TryParse(txtidCliente.Text, out iTempint))
        {
            oEnRequerimiento.idCliente = iTempint;
        }

        if (int.TryParse(ddlDireccionEntrega.DataValueField, out iTempint))
        {
            oEnRequerimiento.idDireccionEntrega = iTempint;
        }

        if (int.TryParse(ddlDireccionCobranza.DataValueField, out iTempint))
        {
            oEnRequerimiento.idDireccionCobranza = iTempint;
        }

        if (int.TryParse(ddlDireccionFactura.DataValueField, out iTempint))
        {
            oEnRequerimiento.idDireccionFactura = iTempint;
        }

        oEnRequerimiento.dfechaEntrega = DateTime.Parse( txtFechaEntrega.Text );
        oEnRequerimiento.sestadoRequerimiento = ddlEstadoRequerimiento.Text;

        bResultado = oRnRequerimiento.Modificar(oEnRequerimiento);

        return bResultado;
    }

    private void CierraVentana(string psValor)
    {
        string sComando = string.Format("if (window.opener){1}window.opener.returnValue = '{0}';{2} window.returnValue='{0}'; window.close();", psValor, "{", "}");
        ClientScript.RegisterStartupScript(Page.GetType(), "Salida", sComando, true);
    }

    private void Continuar()
    {
        divPopupCancelar.Visible = false;
        divPopupConfirmar.Visible = false;
        EstadoControles(true);
        divPopup.Visible = false;
        ProtegeCampos();
    }

    private void ProtegeCampos()
    {
        switch (sModoMantenimiento)
        {
            case "Mod":
                txtidRequerimiento.Enabled = false;
                CargarDatos();
                break;
            case "Ins":
                txtidRequerimiento.Enabled = false;
                ddlEstadoRequerimiento.SelectedValue = "2";                
                break;
        }
        ddlEstadoRequerimiento.Enabled = false;
        txtFechaRequerimiento.Enabled = false;
        txtMontoTotal.Enabled = false;
    }

    private void EstadoControles(bool pbEstadoNuevo)
    {
        foreach (Control oControl in divPantalla.Controls)
        {
            if (oControl is System.Web.UI.WebControls.WebControl)
            {
                ((System.Web.UI.WebControls.WebControl)oControl).Enabled = pbEstadoNuevo;
            }
        }
    }
    }
}